2007-06-10 16:21:00
1using System;
2
3namespace _02
4{
5 class SortNum //输入几个数、排序、输出
6 {
7 private int[] iNum;
8
9 public SortNum()
10 {
11 Init();
12 InputValue();
13 }
14
15 private void Init() //读入数字总数并分配空间
16 {
17 Console.WriteLine("请输入数字的总数:");
18 try
19 {
20 iNum = new int[Int16.Parse(Console.ReadLine())];
21 }
22 catch
23 {
24 Console.WriteLine("您输入的不是有效的数字。");
25 Init();
26 }
27 }
28
29 private void InputValue() //输入数字
30 {
31 for(int i = 0;i < iNum.Length; i++)
32 {
33 Console.WriteLine("请输入第 {0} 个数字:", i + 1);
34 try
35 {
36 iNum[i] = Int16.Parse(Console.ReadLine());
37 }
38 catch
39 {
40 Console.WriteLine("您输入的不是有效的数字。");
41 i--;
42 }
43 }
44 Console.WriteLine("输入结束。");
45 }
46
47 public void Sort(bool inverse)
48 //选择法排序, 若 inverse 为真则从大到小排序, 否则从小到大排序
49 {
50 int i, j, temp;
51
52 for (i = 0; i < iNum.Length; i++)
53 {
54 for (j = i + 1; j < iNum.Length; j++)
55 {
56 if (inverse)
57 {
58 if (iNum[i] < iNum[j])
59 {
60 temp = iNum[i];
61 iNum[i] = iNum[j];
62 iNum[j] = temp;
63 }
64 }
65 else
66 {
67 if (iNum[i] > iNum[j])
68 {
69 temp = iNum[i];
70 iNum[i] = iNum[j];
71 iNum[j] = temp;
72 }
73 }
74 }
75 }
76 }
77
78 public void Sort() //从小到大
79 {
80 Sort(false);
81 }
82
83 public void Print() //输出
84 {
85 foreach (int num in iNum)
86 {
87 Console.Write("{0, 3}", num);
88 }
89 Console.Write("/n");
90 }
91 }
92
93 class Program
94 {
95 static void Main(string[] args)
96 {
97 do
98 {
99 SortNum a = new SortNum();
100
101 Console.WriteLine("您输入的数字是:");
102 a.Print();
103 a.Sort();
104 Console.WriteLine("从小到大排序后是:");
105 a.Print();
106 a.Sort(true);
107 Console.WriteLine("从大到小排序后是:");
108 a.Print();
109
110 Console.Write("按 ESC 退出, 其他任意键继续.../n/n");
111 }
112 while (Console.ReadKey(true).Key != ConsoleKey.Escape);
113 }
114 }
115}
116
117/*
118 * 学习手记
119 *
120 * Console.ReadLine() 从标准输入设备读入一行字符串
121 * Int16.Parse() 将字符串转换为 Int16 类型数值
122 * try...catch... 出错控制,感觉用起来还挺方便
123 * 跟 C/C++ 的一个重大区别是,定义数组、类其实都相当于定义指针
124 * 并没有分配空间,还要用 new 去分配空间
125 * 据说不用 delete 它会自动回收空间
126 * 那么析构函数似乎用不太着了
127 * 居然不支持默认参数,只好用重载
128 * Console.ReadKey() 返回一个 ConsoleKeyInfo 对象, 其 Key 成员表示相应的键
129 *
130 * 2005-06-09
131 */
首发:https://blog.csdn.net/cnStreamlet/article/details/1646808